#define EI_NIDENT 16
typedef struct{
  unsigned char e_ident[EI_NIDENT];
  unit16_t e_type;  //this member of the structure identifies the object type
  unit16_t e_machine;//This member specifies the required architecture for an individual file
  unit32_t e_version;//this member identifies the file version
  ElfN_Addr e_enrty;//this member gives the virual address to which the system first transfers control,thus starting the process
  ElfN_off e_phoff;//this member holds the program header table's file offset in bytes
  ElfN_off e_shoff;//this member holds the section header table's file offset in bytes
  unit32_t e_flags;//this member holds processor-specific flags with the file
  unit16_t e_ehsize;//This member holds the ELF header's size in byte
  unit16_t e_phentsize;//This member holds the size in bytes of one entry in the file's program header table
  unit16_t e_phnum;//This member holds the number of entries in the program header table 
  unit16_t e_shentsize;//This member holds  sections header's size in bytes
  unit16_t e_shnum;//This member holds the number of entries int the section hed table
  unit16_t e_hnum;//This member holds the section header table index of the entry associated with the section name string table
  unit16_t e_shstrndx;
}ElfN_Ehdr;
typedef struct
  unit32_t p_type;//This member of the Phdr struct tells what kind of segment this array element describles or how o interpret he array element'information
  Elf32_Off p_offset;//This member holds the offset form the begining of the file at which the first byte of the segment resides
  Elf32_Addr p_vaddr;//This member holds the virsual address at which the first bytes of the segment resides in memery
  Elf32_Addr p_paddr;//On System for which physical ddressing is relevant,This member is reserved for the segment's physical address.
  unit32_t p_filesz;//This member holds the number of bytes in the file image of the egment
  unit32_t p_memsz;//This member holds the number of bytes in the memory image of the segment
  unit32_t p_flags;//This member holds a bitmask of flags relevant to the segment
  unit32_t p_align;//This member holds the value to which the segment re aligned in memory  and in the file
}Elf32_Phdr;
typedef struct{
  unit32_t sh_name;//This name specifies e name of the sections
  unit32_t sh_type;//This member cateorizes the section's contents and semantics
  unit32_t sh_flags;//Sections support one-bit flags that describe misellneous ttributes
  Elf32_Addr sh_addr;//If tis section appear int the memory image of a process,This member holds the address t which the section's first byte should reside
  Elf32_Off sh_offset;//This member's value holds he byte offset form the egining of the file to the first byte in the section.
  unit32_t sh_size;//This member holds the sections's size in bytes
  unit32_t sh_link;//This member holds a section header table index link,whose interpreation depends on the section type
  unit32_t sh_info;//This member holds extra information ,whose interpretation depends on the section type
  unit32_t sh_addralign;//Some section have address aligment constraints.IF  section holds a doubleword,the system must ensure doubleword alignment for tne entry section.
  unit32_t sh_entsize;//Some sections hold  table of fixed-sized entries,uch a s  a symbol table
}Elf32_Shdr;
typedef struct{
  unit32_t st_name;//This member holds an index into the object file's symbol string table,which holds harater representations of the symbol names; 
  Elf32_Addr st_value;//This member gives the value of the associated ymbol
  unit32_t st_size;//Many Symbols have ssociated sizes.
  unsigned char st_info;//This member specifies the symbol's type and bnding attrbutes
  unsigned char st_oher;//This member defines the symbol visibility
  unit16_t st_shndx;//Every symbol table entry is "defines" in relation to some ection.This member holds the relevant sections header table index 
}Elf32_Sym;
typedef struct{
  Elf32_Addr r_offset;
  unit32_t r_info;
}Elf_Rel;

typedef struct{
  Elf32_Addr r_oofset;//This member givecs the location ath which to apply the relocation action.
  unit32_t r_info;//This member gives both the symbol tables index with respect o which the relocation must be made and the type of relocation to apply.
  unit32_t r_addend;//This member specifies  comtant ddend to compute the value to stored into the reloacatable field
}Elf32_Rela;
typedef struct{
  Elf32_Sword d_tag;
  union{
    Elf32_Word d_val;
    Elf32_Addr d_ptr;//This Member represents program virtual address. 
  }d_un;
}Elf32_Dyn;

